package com.example.demo.controller;


import com.example.demo.model.User;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

@RequestMapping("/param")
@RestController
public class ParamController {
    //需要用到postman来测试
    //传递一个参数
    @RequestMapping("/p1")
    public String p1(String name){
        return "接收到的参数name："+name;
    }

    //传递普通参数，默认类型为String，后端接收时，根据后端定义类型来转换
    @RequestMapping("/p2")
    public String p2(Integer age){
        return "接收到的参数age："+age;
    }

    //基本类型和包装类型不一样，int不可以传空参，必须传参
    @RequestMapping("/p3")
    public String p3(int age){
        return "接收到的参数age："+age;
    }

    //传递多个参数
    @RequestMapping("/p4")
    public String p4(String name,int age){
        return "接收到的参数,name："+name+",age:"+age;
    }

    //传递对象
    @RequestMapping("/p5")
    public String p5(User user){
        return "user:"+user;
    }

    //给参数重命名，因为是必传参数，可以改成不必传参数
    @RequestMapping("/p6")
    public String p6(@RequestParam(value = "username",required = false) String name){
        return "接收到参数："+name;
    }

    //传递数组
    @RequestMapping("/p7")
    public String p7(String[] arr){
        //打上断点，用debug方式判断是否会自动切割（也可使用for循环判断）
        //传递list来接收arr
        return "arr:"+ List.of(arr);
    }

    @RequestMapping("/p8")
    //直接使用List来接收
    //@RequestParam这个注解表示的是参数的绑定，不仅可以绑定参数还可以绑定类型
    //相当于把数组绑成List
    public String p7(@RequestParam List<String> List){
        return "list:"+List;
    }

    //json传递
    //@RequestBody用于json传递
    //{"name":"雨木","age":22,"gender":1}json数据
    @RequestMapping("/p9")
    public String p9(@RequestBody User user){
        return "user"+user;
    }

    //获取url中参数
    //PathVariableL:路径变量
    @RequestMapping("/article/{articleID}")
    public String p10(@PathVariable String articleID){
        return "articleID:"+articleID;
    }

    //上传文件
    //@RequestPart
    @RequestMapping("/p11")
    public String p11(@RequestPart MultipartFile file){
        System.out.println(file.getOriginalFilename());
        return "已上传文件:"+file.getOriginalFilename();
    }

}
